package util;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import modelo.ProfessorVO;

public class Banco {
	
	private static Banco banco; 
	
	// VARIAVEIS DA CLASSE 
	private ObservableList<ProfessorVO> dados  = FXCollections.observableArrayList();
	private int codigo                    = 0;
	
	public static Banco getInstence(){
		
		if(banco == null){
			return banco = new Banco();
		}else{
			return banco;
		}
	}
	
	
	public void save(ProfessorVO professorObj){

		if(Integer.parseInt(professorObj.getCodigo()) > 0 ){
			update(professorObj);
		}else{
			insert(professorObj);
		}
	}
	
	public void insert(ProfessorVO professorObj){
		codigo++;
		professorObj.setCodigo(String.valueOf(codigo));
		dados.add(professorObj);
	}
	
	public void update(ProfessorVO professorObj){
		int index = getProfessorIndex(professorObj);
		dados.remove(index);
		dados.add(index, professorObj);
	}
	
	public void excluir(ProfessorVO professorObj){
		int index = getProfessorIndex(professorObj);
		dados.remove(index);
	}
	
	public ObservableList<ProfessorVO> getDados(){
		return dados;
	}
	
	public ProfessorVO getProfessor(Object pesquisaObj){
		ProfessorVO professorObj   = (ProfessorVO) pesquisaObj;
		return getProfessor(professorObj);
	}
	
	public ProfessorVO getProfessor(ProfessorVO  professorObj){
		
		ProfessorVO  professor  = new ProfessorVO();
		
		for (ProfessorVO professorVO : dados) {
			if(professorVO.getCodigo() == professorObj.getCodigo()){
				professor = professorVO;
			}
		}
	
		return professor;
	}
	
	public int getProfessorIndex(ProfessorVO  professorObj){
		
		int retorno =  -1;
		
		for (int i=0; i < dados.size();i++) {
			if(dados.get(i).getCodigo().equals(professorObj.getCodigo())){
				retorno = i;
			}
		}
	
		return retorno;
	}
	
	public  ObservableList<ProfessorVO> getConsulta(String strPesquisa){
		ObservableList<ProfessorVO> retorno   = FXCollections.observableArrayList();
		
		if(strPesquisa.trim().length() > 0){
			for (ProfessorVO professorVO : dados) {
				if(professorVO.getNome().toLowerCase().contains(strPesquisa.toLowerCase())){
					retorno.add(professorVO);
				}
			}
		}else{
			retorno = dados;
		}
		return retorno;
	}
}
